﻿//#include<iostream>
//using namespace std;
//const int N = 1e5 + 10;
//int l[N];
//int r[N];
//int main()
//{
//	int n = 0;
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		// 存下 i 号结点的左右孩⼦
//		cin >> l[i] >> r[i];
//	}
//	return 0;
//}




//#include<iostream>
//using namespace std;
//const int N = 1e5 + 10;
//int l[N];
//int r[N];
//void dfs1(int u)
//{
//	
//	if (u == 0)return;
//	cout << u;
//	dfs1(l[u]);
//	dfs1(r[u]);
//}
//
//void dfs2(int u)
//{
//
//	if (u == 0)return;
//	dfs2(l[u]);
//	cout << u;
//	dfs2(r[u]);
//}
//
//void dfs3(int u)
//{
//
//	if (u == 0)return;
//	dfs3(l[u]);
//	dfs3(r[u]);
//	cout << u;
//}
//
//int main()
//{
//	int n = 0;
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		// 存下 i 号结点的左右孩⼦
//		cin >> l[i] >> r[i];
//	}
//	dfs1(1);//先序
//	dfs2(1);//中序
//	dfs3(1);//后序
//	return 0;
//}

#include<iostream>
#include<queue>
using namespace std;
const int N = 1e5 + 10;
int l[N];
int r[N];
void bfs()
{
	queue<int>q;
	q.push(1);
	while (q.size())
	{
		auto p = q.front(); q.pop();
		cout << p;
		// 左右孩⼦⼊队
		if (l[p]) q.push(l[p]);
		if (r[p]) q.push(r[p]);
	}
	cout << endl;
}
int main()
{
	int n = 0;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> l[i] >> r[i];
	}
	bfs();
	return 0;
}